package com.persistence.dao.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.model.LineaProduccion;
import com.model.Puesto;
import com.persistence.dao.DAOException;
import com.persistence.dao.DAOManagerMain;
import com.persistence.dao.interfaces.DAOPuesto;

public class MySQLDAOPuesto implements DAOPuesto {
	
	private Puesto puesto = null;
	
	
	public MySQLDAOPuesto() {
	}

	public int insert(Puesto puesto) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection.prepareStatement("insert into Puesto ("
					+ "Id_Puesto, nombre, id_Linea "
					+ ") " + "values (?, ?, ?) ");

			stmt.setInt(1, puesto.getNroPuesto());
			stmt.setString(2, puesto.getNombre());			
			stmt.setInt(3, puesto.getNroLinea().getNroLinea());
			stmt.executeUpdate();
			
			return 1;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);

		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public int update(Puesto puesto) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("update Puesto " 
							+ "set nombre = ?, id_Lina = ?"
							+ " where id_Puesto = ? ");

			stmt.setString(1, puesto.getNombre());
         stmt.setInt(2, puesto.getNroLinea().getNroLinea());

			stmt.executeUpdate();
			return 1;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public int eliminate(Puesto puesto) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("delete from Puesto where id_Puesto = ? ");
			stmt.setLong(1, puesto.getNroPuesto());

			stmt.executeUpdate();
			return 1;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public ArrayList<Puesto> select() throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;
		ArrayList<Puesto> puestos = new ArrayList<Puesto>();

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection.prepareStatement("select P.*, L.* from"
			+ " puesto P, lineaproduccion L "
         + "where P.Id_Linea=L.Id_Linea ");
			rs = stmt.executeQuery();

			while (rs.next()) {
				Puesto puesto = new Puesto();
				puesto.setNroPuesto(rs.getInt("Id_Puesto"));
				puesto.setNombre(rs.getString("nombre"));
				puesto.getNroLinea().setNroLinea(rs.getInt("Id_Linea"));
            
				puestos.add(puesto);		
			}

			return puestos;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public Puesto findById(int id) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;
		puesto = new Puesto();

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("select P.*, L.* from"
         + " puesto P, lineaproduccion L "
         + "where P.Id_Linea=L.Id_Linea "   
					+		"an where Id_Puesto = ?");
			stmt.setLong(1, id);
			rs = stmt.executeQuery();

			if (rs.next()) {
			   Puesto puesto = new Puesto();
			   puesto.setNroPuesto(rs.getInt("Id_Puesto"));
            puesto.setNombre(rs.getString("nombre"));
            puesto.getNroLinea().setNroLinea(rs.getInt("Id_Linea"));
			}

			return puesto;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	@Override
	public boolean existInstance(Puesto puesto) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;
		boolean result = false;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("select * from Puesto where UCASE(Nombre)");

			stmt.setString(1, puesto.getNombre().toUpperCase());
//			stmt.setString(2, puesto.getApellido().toUpperCase());
			rs = stmt.executeQuery();

			if (rs.next()) {
				result = true;
			}

			return result;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}
}
